# 导入StructuredTool 库  提供比@tool 更多的配置性

from langchain_core.tools import StructuredTool, ToolException


# 定义普通方法
def get_weather(city: str) -> int:
    """ 获取给定城市的天气 """
    is_find_city = False
    if is_find_city:
        print(f"查询{city}的天气然后返回")
    else:
        raise ToolException(f"错误，没有找到{city}的城市")


# 异常时处理函数
def get_weather_handle_error(error: ToolException) -> str:
    return f"工具执行期间发生以下错误:`{error.args[0]}`"

# 生成工具方法
get_weather_tool = StructuredTool.from_function(
    func=get_weather,
    # 默认情况下，如果函数抛出ToolException ,则将ToolException 的message 作为响应
    # handle_tool_error：方式1 handle_tool_error=True, 如果handle_tool_error设置为Ture,则返回ToolException 异常文本，Fasle将会抛出ToolException
    # handle_tool_error=True,
    # handle_tool_error，方式2 也可以直接处理
    # handle_tool_error="服务异常，请稍后再试",
    # 也可以调用一个函数
    handle_tool_error=get_weather_handle_error
)

response = get_weather_tool.invoke({"city": "anxiang"})
print(response)
